package com.bwc.subject.application.interceptor;

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Objects;

/**
 * Feign请求拦截器
 * 这个拦截器要调用方去做，因为在使用Feign作为HTTP客户端调用远程服务时，
 * 两个微服务之间想互相调用时，一些额外的传递，可以在这里去做。
 * 实现请求拦截器（RequestInterceptor）允许你在发送请求之前对请求进行修改，
 * 例如添加头信息、请求参数等
 * RequestInterceptor是feign提供的一个接口，专门对feign请求做处理
 * @author: ChickenWing
 * @date: 2023/12/3
 */
@Component
public class FeignRequestInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate requestTemplate) {
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = requestAttributes.getRequest();
        if (Objects.nonNull(request)) {
            String loginId = request.getHeader("loginId");
            if (StringUtils.isNotBlank(loginId)) {
                requestTemplate.header("loginId", loginId);
            }
        }
    }

}
